/**
 * Notes: 内容检查助手 (新版API)
 * Ver : WeCollege Server API 1.0.0
 * Date: 2025-01-27
 * Description: 使用自建服务器API进行内容检查
 */

const serverHelper = require('./server_helper.js');

/**
 * 文本内容检查
 * @param {string} content - 要检查的文本内容
 * @returns {Promise<boolean>} 检查结果，true表示通过
 */
async function textCheck(content) {
  if (!content || content.trim().length === 0) {
    return true;
  }

  try {
    const result = await serverHelper.callServerSumbit('common/textCheck', {
      content: content
    }, {
      title: '内容检查中...',
      hint: false
    });

    return result.data && result.data.pass === true;
  } catch (err) {
    console.error('文本内容检查失败:', err);
    // 检查失败时默认通过，避免影响用户体验
    return true;
  }
}

/**
 * 图片内容检查
 * @param {string} imgPath - 图片路径（本地临时路径或网络URL）
 * @returns {Promise<boolean>} 检查结果，true表示通过
 */
async function imgCheck(imgPath) {
  if (!imgPath) {
    return true;
  }

  try {
    // 如果是本地临时文件，需要先上传到服务器进行检查
    if (imgPath.includes('tmp') || imgPath.includes('temp') || imgPath.includes('wxfile')) {
      // 上传图片进行检查
      const result = await _uploadAndCheckImage(imgPath);
      return result;
    } else {
      // 网络图片直接检查URL
      const result = await serverHelper.callServerSumbit('common/imageCheck', {
        imageUrl: imgPath
      }, {
        title: '图片检查中...',
        hint: false
      });

      return result.data && result.data.pass === true;
    }
  } catch (err) {
    console.error('图片内容检查失败:', err);
    // 检查失败时默认通过，避免影响用户体验
    return true;
  }
}

/**
 * 上传并检查图片
 * @param {string} filePath - 本地文件路径
 * @returns {Promise<boolean>} 检查结果
 */
async function _uploadAndCheckImage(filePath) {
  return new Promise((resolve, reject) => {
    const checkUrl = `${require('../setting/api_config.js').baseURL}/api/common/imageCheckUpload`;
    
    wx.uploadFile({
      url: checkUrl,
      filePath: filePath,
      name: 'image',
      success: function (res) {
        try {
          const data = JSON.parse(res.data);
          if (data.code === 200) {
            resolve(data.data && data.data.pass === true);
          } else {
            console.error('图片检查失败:', data.message);
            resolve(true); // 检查失败默认通过
          }
        } catch (e) {
          console.error('图片检查响应解析失败:', e);
          resolve(true); // 解析失败默认通过
        }
      },
      fail: function (err) {
        console.error('图片检查上传失败:', err);
        resolve(true); // 上传失败默认通过
      }
    });
  });
}

/**
 * 批量文本检查
 * @param {Array<string>} textList - 文本列表
 * @returns {Promise<boolean>} 检查结果，全部通过才返回true
 */
async function batchTextCheck(textList) {
  if (!textList || textList.length === 0) {
    return true;
  }

  try {
    const result = await serverHelper.callServerSumbit('common/batchTextCheck', {
      textList: textList
    }, {
      title: '内容检查中...',
      hint: false
    });

    return result.data && result.data.allPass === true;
  } catch (err) {
    console.error('批量文本检查失败:', err);
    return true;
  }
}

/**
 * 批量图片检查
 * @param {Array<string>} imgList - 图片路径列表
 * @returns {Promise<boolean>} 检查结果，全部通过才返回true
 */
async function batchImgCheck(imgList) {
  if (!imgList || imgList.length === 0) {
    return true;
  }

  try {
    // 逐个检查图片
    for (let i = 0; i < imgList.length; i++) {
      const pass = await imgCheck(imgList[i]);
      if (!pass) {
        return false;
      }
    }
    return true;
  } catch (err) {
    console.error('批量图片检查失败:', err);
    return true;
  }
}

/**
 * 富文本内容检查
 * @param {Array} richContent - 富文本内容数组
 * @returns {Promise<boolean>} 检查结果
 */
async function richContentCheck(richContent) {
  if (!richContent || richContent.length === 0) {
    return true;
  }

  try {
    // 提取文本和图片
    const textList = [];
    const imgList = [];

    richContent.forEach(item => {
      if (item.type === 'text' && item.val) {
        textList.push(item.val);
      } else if (item.type === 'img' && item.val) {
        imgList.push(item.val);
      }
    });

    // 分别检查文本和图片
    const textPass = await batchTextCheck(textList);
    const imgPass = await batchImgCheck(imgList);

    return textPass && imgPass;
  } catch (err) {
    console.error('富文本内容检查失败:', err);
    return true;
  }
}

module.exports = {
  textCheck,
  imgCheck,
  batchTextCheck,
  batchImgCheck,
  richContentCheck
};